﻿package com.singlenotion
{
 import flash.display.DisplayObject;
 import flash.utils.describeType;
 import flash.utils.getDefinitionByName;
 import flash.utils.getQualifiedClassName;
 
 public class UtilFunctions
 {
	public static function centerObject($object:DisplayObject, $w:Number=0, $h:Number=0):void
	{
		$object.x = ($w == 0) ? -($object.width / 2) : -($w / 2);
		$object.y = ($h == 0) ? -($object.height / 2) : -($h / 2);
	}
	 
     public static function newSibling($sourceObj:Object):* {
         if($sourceObj) {
 
             var objSibling:*;
             try {
                 var classOfSourceObj:Class = getDefinitionByName(getQualifiedClassName($sourceObj)) as Class;
                 objSibling = new classOfSourceObj();
             }
 
             catch(e:Object) {}
 
             return objSibling;
         }
         return null;
     }
 
     public static function clone($source:Object):Object {
 
         var clone:Object;
         if($source) {
             clone = newSibling($source);
 
             if(clone) {
                 copyData($source, clone);
             }
         }
 
         return clone;
     }
 
     public static function copyData($source:Object, $destination:Object):void {
 
         //copies data from commonly named properties and getter/setter pairs
         if(($source) && ($destination)) {
 
             try {
                 var sourceInfo:XML = describeType($source);
                 var prop:XML;
 
                 for each(prop in sourceInfo.variable) {
 
                     if($destination.hasOwnProperty(prop.@name)) {
                         $destination[prop.@name] = $source[prop.@name];
                     }
 
                 }
 
                 for each(prop in sourceInfo.accessor) {
                     if(prop.@access == "readwrite") {
                         if($destination.hasOwnProperty(prop.@name)) {
                             $destination[prop.@name] = $source[prop.@name];
                         }
 
                     }
                 }
             }
             catch (err:Object) {
                 ;
             }
         }
     }
 }
}